In this notebook we conduct exploratory factor analyses (EFAs) on the datasets for our studies of concepts of mental life, in which each participants judged the various mental capacities of a particular target entity. We analyze datasets for adults and children from each of our five field sites: the US, Ghana, Thailand, China, and Vanuatu.

This notebook contains supplementary results: Cultural consensus analysis (CCA). We have considered all responses of ‘kinda’ as equivalent to ‘yes’ (1).

package ‘caret’ was built under R version 4.0.2

CCA: US adults

Single analysis with all targets

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Separate analyses by target

The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefullyMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefullyMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

CCA: Ghana adults

Single analysis with all targets

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Separate analyses by target

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneAn ultra-Heywood case was detected.  Examine the results carefully

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

Factor `target` contains implicit NA, consider using `forcats::fct_explicit_na`

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

CCA: Thailand adults

Single analysis with all targets

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Separate analyses by target

The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefullyMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

CCA: China adults

Single analysis with all targets

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Separate analyses by target

An ultra-Heywood case was detected.  Examine the results carefullyThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefullyThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

Factor `target` contains implicit NA, consider using `forcats::fct_explicit_na`

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

CCA: Vanuatu adults

Single analysis with all targets

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Separate analyses by target

An ultra-Heywood case was detected.  Examine the results carefullyMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefullyThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

CCA: All adults

Single analysis with all targets

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Separate analyses by target

Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneMatrix was not positive definite, smoothing was doneThe estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.Matrix was not positive definite, smoothing was done

"Conventionally, a ratio of the first-to-second eigenvalue > 3:1…

“…plus no (or very few) negative loadings on the first factor…”

“…and a mean competence of (very roughly) around .5 (and preferably much higher) means you have consensus, and increases your confidence in the inference that it is a cultural consensus.”

Alpha

LS0tCnRpdGxlOiAiQ29uY2VwdHMgb2YgbWVudGFsIGxpZmUgYWNyb3NzIGN1bHR1cmVzOiBTZWNvbmRhcnkgYW5hbHlzaXMiCmF1dGhvcnM6ICJXZWlzbWFuLCBMZWdhcmUsICYgTHVocm1hbm4iCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKYGBge3Igc2V0dXB9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRiwgbWVzc2FnZSA9IEYpCmBgYAoKSW4gdGhpcyBub3RlYm9vayB3ZSBjb25kdWN0IGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyAoRUZBcykgb24gdGhlIGRhdGFzZXRzIGZvciBvdXIgc3R1ZGllcyBvZiBjb25jZXB0cyBvZiBtZW50YWwgbGlmZSwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudHMganVkZ2VkIHRoZSB2YXJpb3VzIG1lbnRhbCBjYXBhY2l0aWVzIG9mIGEgcGFydGljdWxhciB0YXJnZXQgZW50aXR5LiBXZSBhbmFseXplIGRhdGFzZXRzIGZvciBhZHVsdHMgYW5kIGNoaWxkcmVuIGZyb20gZWFjaCBvZiBvdXIgZml2ZSBmaWVsZCBzaXRlczogdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIENoaW5hLCBhbmQgVmFudWF0dS4gCgpUaGlzIG5vdGVib29rIGNvbnRhaW5zIHN1cHBsZW1lbnRhcnkgcmVzdWx0czogQ3VsdHVyYWwgY29uc2Vuc3VzIGFuYWx5c2lzIChDQ0EpLiAqKldlIGhhdmUgY29uc2lkZXJlZCBhbGwgcmVzcG9uc2VzIG9mICdraW5kYScgYXMgZXF1aXZhbGVudCB0byAneWVzJyAoMSkuKioKCmBgYHtyLCBlY2hvID0gRiwgbWVzc2FnZSA9IEZ9CnNvdXJjZSgiLi9zY3JpcHRzL2RlcGVuZGVuY2llcy5SIikKc291cmNlKCIuL3NjcmlwdHMvY3VzdG9tX2Z1bnMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3Zhcl9yZWNvZGVfY29udHJhc3QuUiIpCmBgYAoKYGBge3J9CnJlcXVpcmUoY2FyZXQpCmBgYAoKYGBge3IgZGF0YX0KIyByZWFkIGluIGRhdGEsIHNob3J0ZW4gImZlZWwgc2ljaywiIGFuZCBsaW1pdCB0byB1bml2ZXJzYWwgdGFyZ2V0cyBhbmQgcXVlc3Rpb25zOiBhZHVsdHMKZF91c19hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF91c19hZHVsdHMuY3N2IikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID09IDAgfiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF9naF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9naF9hZHVsdHMuY3N2IikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID09IDAgfiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF90aF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF90aF9hZHVsdHMuY3N2IikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID09IDAgfiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF9jaF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9jaF9hZHVsdHMuY3N2IikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID09IDAgfiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF92dF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF92dF9hZHVsdHMuY3N2IikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID09IDAgfiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKCiMgcmVhZCBpbiBkYXRhLCBzaG9ydGVuICJmZWVsIHNpY2ssIiBhbmQgbGltaXQgdG8gdW5pdmVyc2FsIHRhcmdldHMgYW5kIHF1ZXN0aW9uczogY2hpbGRyZW4KZF91c19jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX3VzX2NoaWxkcmVuLmNzdiIpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGNhc2Vfd2hlbihyZXNwb25zZSAlaW4lIGMoMC41LCAxKSB+IDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9PSAwIH4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX3JlYWxfKSkgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpCmRfZ2hfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9naF9jaGlsZHJlbi5jc3YiKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBjYXNlX3doZW4ocmVzcG9uc2UgJWluJSBjKDAuNSwgMSkgfiAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPT0gMCB+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9yZWFsXykpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKQojIGRfZ2hfZW5nX2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfZ2hfZW5nX2NoaWxkcmVuLmNzdiIpICU+JQogICMgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPT0gMCB+IDAsCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX3JlYWxfKSkgJT4lCiMgICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQojICAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKQpkX3RoX2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfdGhfY2hpbGRyZW4uY3N2IikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKHJlc3BvbnNlICVpbiUgYygwLjUsIDEpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID09IDAgfiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF9jaF9jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX2NoX2NoaWxkcmVuLmNzdiIpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGNhc2Vfd2hlbihyZXNwb25zZSAlaW4lIGMoMC41LCAxKSB+IDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9PSAwIH4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX3JlYWxfKSkgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpCmRfdnRfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF92dF9jaGlsZHJlbi5jc3YiKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBjYXNlX3doZW4ocmVzcG9uc2UgJWluJSBjKDAuNSwgMSkgfiAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPT0gMCB+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9yZWFsXykpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKSAlPiUKICAjIGZpbHRlciBvdXQgcGFydGljaXBhbnRzIG91dHNpZGUgb2YgdGhlIGFnZSByYW5nZQogIGZpbHRlcigoYWdlID49IDYgJiBhZ2UgPD0gMTIpIHwgaXMubmEoYWdlKSkKYGBgCgpgYGB7ciB3aWRlfQojIG1ha2Ugd2lkZS1mb3JtIGRhdGFzZXRzIGZvciBFRkE6IGFkdWx0cwpkX3VzX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfdXNfYWR1bHRzKQpkX2doX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfZ2hfYWR1bHRzKQpkX3RoX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfdGhfYWR1bHRzKQpkX2NoX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfY2hfYWR1bHRzKQpkX3Z0X2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfdnRfYWR1bHRzKQoKIyBtYWtlIHdpZGUtZm9ybSBkYXRhc2V0cyBmb3IgRUZBOiBjaGlsZHJlbgpkX3VzX2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF91c19jaGlsZHJlbikKZF9naF9jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfZ2hfY2hpbGRyZW4pCiMgZF9naF9lbmdfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX2doX2VuZ19jaGlsZHJlbikKZF90aF9jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfdGhfY2hpbGRyZW4pCmRfY2hfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX2NoX2NoaWxkcmVuKQpkX3Z0X2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF92dF9jaGlsZHJlbikKYGBgCgpgYGB7cn0KZF9hZHVsdHNfYWxsIDwtIGJpbmRfcm93cyhkX3VzX2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkX2doX2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3RoX2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NoX2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Z0X2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJqX2lkIikKYGBgCgoKIyBDQ0E6IFVTIGFkdWx0cwoKIyMgU2luZ2xlIGFuYWx5c2lzIHdpdGggYWxsIHRhcmdldHMKCmBgYHtyfQpxX2FkdWx0c191cyA8LSBkX3VzX2FkdWx0c193ICU+JSAKICAjIHJlbW92ZSBwYXJ0aWNpcGFudHMgd2hvIHNraXBwZWQgcXVlc3Rpb25zCiAgZHJvcF9uYSgpICU+JSAKICB0KCkgJT4lIGRhdGEuZnJhbWUoKQpgYGAKCmBgYHtyfQojIGNoZWNrIGZvciBuZWFyLXplcm8gdmFyaWFuY2UgYnkgY29sdW1uCm56X2NvbCA8LSBuZWFyWmVyb1ZhcihxX2FkdWx0c191cywgc2F2ZU1ldHJpY3MgPSBUKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGZpbHRlcihuenYgPT0gVCkKCnFfYWR1bHRzX3VzIDwtIHFfYWR1bHRzX3VzICU+JQogIHNlbGVjdCgtKG56X2NvbCRjYXBhY2l0eSkpCmBgYAoKYGBge3J9CnFmYV91c19hZHVsdHMgPC0gZmFfZnVuKHFfYWR1bHRzX3VzLCBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKYGBgCgoiQ29udmVudGlvbmFsbHksIGEgcmF0aW8gb2YgdGhlIGZpcnN0LXRvLXNlY29uZCBlaWdlbnZhbHVlID4gMzoxLi4uIAoKYGBge3J9CnFmYV91c19hZHVsdHMkVmFjY291bnRlZCAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgbXV0YXRlKHJhdGlvID0gRjEvRjIpICU+JQogIGZpbHRlcihncmVwbCgiU1MiLCBzdGF0KSkKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CnFmYV91c19hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudChGMV9uZWcpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogIGZpbHRlcihGMV9uZWcgPT0gVCkKYGBgCgoiLi4uYW5kIGEgbWVhbiBjb21wZXRlbmNlIG9mICh2ZXJ5IHJvdWdobHkpIGFyb3VuZCAuNSAoYW5kIHByZWZlcmFibHkgbXVjaCBoaWdoZXIpIG1lYW5zIHlvdSBoYXZlIGNvbnNlbnN1cywgYW5kIGluY3JlYXNlcyB5b3VyIGNvbmZpZGVuY2UgaW4gdGhlIGluZmVyZW5jZSB0aGF0IGl0IGlzIGEgY3VsdHVyYWwgY29uc2Vuc3VzLiIgCgpgYGB7cn0KcWZhX3VzX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpxZmFfdXNfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihkX3VzX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDEsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCBzaXplID0gMC4xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGFlc3RoZXRpY3MgPSBjKCJjb2xvciIsICJmaWxsIikpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHRhcmdldCwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiVVMgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgojIyBTZXBhcmF0ZSBhbmFseXNlcyBieSB0YXJnZXQKCmBgYHtyfQojIHFmYV91c19hZHVsdHNfcm9ja3MgPC0gZmFfZnVuKHFfYWR1bHRzX3VzICU+JSBzZWxlY3QoY29udGFpbnMoInJvY2tzIikpLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3VzX2FkdWx0c19mbG93ZXJzIDwtIGZhX2Z1bihxX2FkdWx0c191cyAlPiUgc2VsZWN0KGNvbnRhaW5zKCJmbG93ZXJzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3VzX2FkdWx0c19iZWV0bGVzIDwtIGZhX2Z1bihxX2FkdWx0c191cyAlPiUgc2VsZWN0KGNvbnRhaW5zKCJiZWV0bGVzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucygiY3JpY2tldHMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdXNfYWR1bHRzX2NoaWNrZW5zIDwtIGZhX2Z1bihxX2FkdWx0c191cyAlPiUgc2VsZWN0KGNvbnRhaW5zKCJjaGlja2VucyIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdXNfYWR1bHRzX21pY2UgPC0gZmFfZnVuKHFfYWR1bHRzX3VzICU+JSBzZWxlY3QoY29udGFpbnMoIm1pY2UiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdXNfYWR1bHRzX2RvZ3MgPC0gZmFfZnVuKHFfYWR1bHRzX3VzICU+JSBzZWxlY3QoY29udGFpbnMoImRvZ3MiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQojIHFmYV91c19hZHVsdHNfY2hpbGRyZW4gPC0gZmFfZnVuKHFfYWR1bHRzX3VzICU+JSBzZWxlY3QoY29udGFpbnMoImNoaWxkcmVuIikpLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3VzX2FkdWx0c19jZWxscGhvbmVzIDwtIGZhX2Z1bihxX2FkdWx0c191cyAlPiUgc2VsZWN0KGNvbnRhaW5zKCJjZWxscGhvbmVzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3VzX2FkdWx0c19naG9zdHMgPC0gZmFfZnVuKHFfYWR1bHRzX3VzICU+JSBzZWxlY3QoY29udGFpbnMoImdob3N0cyIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3VzX2FkdWx0c19nb2QgPC0gZmFfZnVuKHFfYWR1bHRzX3VzICU+JSBzZWxlY3QoY29udGFpbnMoImdvZCIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKYGBgCgoiQ29udmVudGlvbmFsbHksIGEgcmF0aW8gb2YgdGhlIGZpcnN0LXRvLXNlY29uZCBlaWdlbnZhbHVlID4gMzoxLi4uCgpgYGB7cn0KZGF0YS5mcmFtZSgjcm9ja3MgPSBxZmFfdXNfYWR1bHRzX3JvY2tzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgZmxvd2VycyA9IHFmYV91c19hZHVsdHNfZmxvd2VycyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgIGJlZXRsZXMgPSBxZmFfdXNfYWR1bHRzX2JlZXRsZXMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICBjaGlja2VucyA9IHFmYV91c19hZHVsdHNfY2hpY2tlbnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICBtaWNlID0gcWZhX3VzX2FkdWx0c19taWNlJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgZG9ncyA9IHFmYV91c19hZHVsdHNfZG9ncyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICMgY2hpbGRyZW4gPSBxZmFfdXNfYWR1bHRzX2NoaWxkcmVuJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgY2VsbHBob25lcyA9IHFmYV91c19hZHVsdHNfY2VsbHBob25lcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgIGdob3N0cyA9IHFmYV91c19hZHVsdHNfZ2hvc3RzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgZ29kID0gcWZhX3VzX2FkdWx0c19nb2QkVmFjY291bnRlZFsxLF0pICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ0YXJnZXQiKSAlPiUKICBtdXRhdGUocmF0aW8gPSBGMS9GMikKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CmJpbmRfcm93cygjbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfYmVldGxlcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2NoaWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfbWljZSwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2RvZ3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICAjIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2NoaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2dob3N0cywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2dvZCwgbG9uZ193aWRlID0gIndpZGUiKSkgJT4lCiAgcmVuYW1lKHN1YmpfaWQgPSBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIG11dGF0ZShGMV9uZWcgPSBpZmVsc2UoRjEgPCAwLCBULCBGKSkgJT4lCiAgY291bnQodGFyZ2V0LCBGMV9uZWcpICU+JQogIGNvbXBsZXRlKEYxX25lZywgbmVzdGluZyh0YXJnZXQpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHRhcmdldCkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkgJT4lCiAgZmlsdGVyKEYxX25lZyA9PSBUKQpgYGAKCiIuLi5hbmQgYSBtZWFuIGNvbXBldGVuY2Ugb2YgKHZlcnkgcm91Z2hseSkgYXJvdW5kIC41IChhbmQgcHJlZmVyYWJseSBtdWNoIGhpZ2hlcikgbWVhbnMgeW91IGhhdmUgY29uc2Vuc3VzLCBhbmQgaW5jcmVhc2VzIHlvdXIgY29uZmlkZW5jZSBpbiB0aGUgaW5mZXJlbmNlIHRoYXQgaXQgaXMgYSBjdWx0dXJhbCBjb25zZW5zdXMuIiAKCmBgYHtyfQpiaW5kX3Jvd3MoI2xvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX3JvY2tzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfZmxvd2VycywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2JlZXRsZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19jaGlja2VucywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX21pY2UsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19kb2dzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgIyBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19jaGlsZHJlbiwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2NlbGxwaG9uZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19naG9zdHMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19nb2QsIGxvbmdfd2lkZSA9ICJ3aWRlIikpICU+JQogIHJlbmFtZShzdWJqX2lkID0gY2FwYWNpdHkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICB0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBncm91cF9ieSh0YXJnZXQpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihGMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjV9CmJpbmRfcm93cygjbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3VzX2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfYmVldGxlcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2NoaWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfbWljZSwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2RvZ3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICAjIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2NoaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV91c19hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2dob3N0cywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdXNfYWR1bHRzX2dvZCwgbG9uZ193aWRlID0gIndpZGUiKSkgJT4lCiAgcmVuYW1lKHN1YmpfaWQgPSBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKHN1YmpfaWQsIHRhcmdldCkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGFyZ2V0LCB5ID0gbG9hZGluZywgY29sb3IgPSBmYWN0b3IsIGZpbGwgPSBmYWN0b3IpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkodGFyZ2V0LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh0aXRsZSA9ICJVUyBhZHVsdHMgKHNlcGFyYXRlIENDQXMgYnkgdGFyZ2V0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKCiMgQ0NBOiBHaGFuYSBhZHVsdHMKCiMjIFNpbmdsZSBhbmFseXNpcyB3aXRoIGFsbCB0YXJnZXRzCgpgYGB7cn0KcV9hZHVsdHNfZ2ggPC0gZF9naF9hZHVsdHNfdyAlPiUgCiAgIyByZW1vdmUgcGFydGljaXBhbnRzIHdobyBza2lwcGVkIHF1ZXN0aW9ucwogIGRyb3BfbmEoKSAlPiUgCiAgdCgpICU+JSBkYXRhLmZyYW1lKCkKYGBgCgpgYGB7cn0KIyBjaGVjayBmb3IgbmVhci16ZXJvIHZhcmlhbmNlIGJ5IGNvbHVtbgpuel9jb2wgPC0gbmVhclplcm9WYXIocV9hZHVsdHNfZ2gsIHNhdmVNZXRyaWNzID0gVCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBmaWx0ZXIobnp2ID09IFQpCgpxX2FkdWx0c19naCA8LSBxX2FkdWx0c19naCAlPiUKICBzZWxlY3QoLShuel9jb2wkY2FwYWNpdHkpKQpgYGAKCmBgYHtyfQpxZmFfZ2hfYWR1bHRzIDwtIGZhX2Z1bihxX2FkdWx0c19naCwgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCmBgYAoKIkNvbnZlbnRpb25hbGx5LCBhIHJhdGlvIG9mIHRoZSBmaXJzdC10by1zZWNvbmQgZWlnZW52YWx1ZSA+IDM6MS4uLiAKCmBgYHtyfQpxZmFfZ2hfYWR1bHRzJFZhY2NvdW50ZWQgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3RhdCIpICU+JQogIG11dGF0ZShyYXRpbyA9IEYxL0YyKSAlPiUKICBmaWx0ZXIoZ3JlcGwoIlNTIiwgc3RhdCkpCmBgYAoKIi4uLnBsdXMgbm8gKG9yIHZlcnkgZmV3KSBuZWdhdGl2ZSBsb2FkaW5ncyBvbiB0aGUgZmlyc3QgZmFjdG9yLi4uIiAKCmBgYHtyfQpxZmFfZ2hfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIG11dGF0ZShGMV9uZWcgPSBpZmVsc2UoRjEgPCAwLCBULCBGKSkgJT4lCiAgY291bnQoRjFfbmVnKSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBmaWx0ZXIoRjFfbmVnID09IFQpCmBgYAoKIi4uLmFuZCBhIG1lYW4gY29tcGV0ZW5jZSBvZiAodmVyeSByb3VnaGx5KSBhcm91bmQgLjUgKGFuZCBwcmVmZXJhYmx5IG11Y2ggaGlnaGVyKSBtZWFucyB5b3UgaGF2ZSBjb25zZW5zdXMsIGFuZCBpbmNyZWFzZXMgeW91ciBjb25maWRlbmNlIGluIHRoZSBpbmZlcmVuY2UgdGhhdCBpdCBpcyBhIGN1bHR1cmFsIGNvbnNlbnN1cy4iIAoKYGBge3J9CnFmYV9naF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKEYxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNX0KcWZhX2doX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBsZWZ0X2pvaW4oZF9naF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWMoc3Vial9pZCwgdGFyZ2V0KSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0YXJnZXQsIHkgPSBsb2FkaW5nLCBjb2xvciA9IGZhY3RvciwgZmlsbCA9IGZhY3RvcikpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAxLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMCwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiLCAiZmlsbCIpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieSh0YXJnZXQsIGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibG9hZGluZyIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBzaGFwZSA9IDIxLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBsYWJzKHRpdGxlID0gIkdoYW5hIGFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKIyMgU2VwYXJhdGUgYW5hbHlzZXMgYnkgdGFyZ2V0CgpgYGB7cn0KIyBxZmFfZ2hfYWR1bHRzX3JvY2tzIDwtIGZhX2Z1bihxX2FkdWx0c19naCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJyb2NrcyIpKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKIyBxZmFfZ2hfYWR1bHRzX2Zsb3dlcnMgPC0gZmFfZnVuKHFfYWR1bHRzX2doICU+JSBzZWxlY3QoY29udGFpbnMoImZsb3dlcnMiKSksIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV9naF9hZHVsdHNfYmVldGxlcyA8LSBmYV9mdW4ocV9hZHVsdHNfZ2ggJT4lIHNlbGVjdChjb250YWlucygiYmVldGxlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoImNyaWNrZXRzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2doX2FkdWx0c19jaGlja2VucyA8LSBmYV9mdW4ocV9hZHVsdHNfZ2ggJT4lIHNlbGVjdChjb250YWlucygiY2hpY2tlbnMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2doX2FkdWx0c19taWNlIDwtIGZhX2Z1bihxX2FkdWx0c19naCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJtaWNlIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2doX2FkdWx0c19kb2dzIDwtIGZhX2Z1bihxX2FkdWx0c19naCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJkb2dzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2doX2FkdWx0c19jaGlsZHJlbiA8LSBmYV9mdW4ocV9hZHVsdHNfZ2ggJT4lIHNlbGVjdChjb250YWlucygiY2hpbGRyZW4iKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQojIHFmYV9naF9hZHVsdHNfY2VsbHBob25lcyA8LSBmYV9mdW4ocV9hZHVsdHNfZ2ggJT4lIHNlbGVjdChjb250YWlucygiY2VsbHBob25lcyIpKSwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2doX2FkdWx0c19naG9zdHMgPC0gZmFfZnVuKHFfYWR1bHRzX2doICU+JSBzZWxlY3QoY29udGFpbnMoImdob3N0cyIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2doX2FkdWx0c19nb2QgPC0gZmFfZnVuKHFfYWR1bHRzX2doICU+JSBzZWxlY3QoY29udGFpbnMoImdvZCIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKYGBgCgoiQ29udmVudGlvbmFsbHksIGEgcmF0aW8gb2YgdGhlIGZpcnN0LXRvLXNlY29uZCBlaWdlbnZhbHVlID4gMzoxLi4uCgpgYGB7cn0KZGF0YS5mcmFtZSgjIHJvY2tzID0gcWZhX2doX2FkdWx0c19yb2NrcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICAjIGZsb3dlcnMgPSBxZmFfZ2hfYWR1bHRzX2Zsb3dlcnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgYmVldGxlcyA9IHFmYV9naF9hZHVsdHNfYmVldGxlcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBjaGlja2VucyA9IHFmYV9naF9hZHVsdHNfY2hpY2tlbnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgbWljZSA9IHFmYV9naF9hZHVsdHNfbWljZSRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBkb2dzID0gcWZhX2doX2FkdWx0c19kb2dzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGNoaWxkcmVuID0gcWZhX2doX2FkdWx0c19jaGlsZHJlbiRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICAjIGNlbGxwaG9uZXMgPSBxZmFfZ2hfYWR1bHRzX2NlbGxwaG9uZXMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZ2hvc3RzID0gcWZhX2doX2FkdWx0c19naG9zdHMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZ29kID0gcWZhX2doX2FkdWx0c19nb2QkVmFjY291bnRlZFsxLF0pICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ0YXJnZXQiKSAlPiUKICBtdXRhdGUocmF0aW8gPSBGMS9GMikKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CmJpbmRfcm93cygjbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICAjIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2Zsb3dlcnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19iZWV0bGVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfY2hpY2tlbnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19taWNlLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfZG9ncywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2NoaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgIyBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfZ2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudCh0YXJnZXQsIEYxX25lZykgJT4lCiAgY29tcGxldGUoRjFfbmVnLCBuZXN0aW5nKHRhcmdldCksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBmaWx0ZXIoRjFfbmVnID09IFQpCmBgYAoKIi4uLmFuZCBhIG1lYW4gY29tcGV0ZW5jZSBvZiAodmVyeSByb3VnaGx5KSBhcm91bmQgLjUgKGFuZCBwcmVmZXJhYmx5IG11Y2ggaGlnaGVyKSBtZWFucyB5b3UgaGF2ZSBjb25zZW5zdXMsIGFuZCBpbmNyZWFzZXMgeW91ciBjb25maWRlbmNlIGluIHRoZSBpbmZlcmVuY2UgdGhhdCBpdCBpcyBhIGN1bHR1cmFsIGNvbnNlbnN1cy4iIAoKYGBge3J9CmJpbmRfcm93cygjbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICAjIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2Zsb3dlcnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19iZWV0bGVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfY2hpY2tlbnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19taWNlLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfZG9ncywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2NoaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgIyBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfZ2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpiaW5kX3Jvd3MoI2xvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX3JvY2tzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgIyBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfYmVldGxlcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2NoaWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfbWljZSwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2RvZ3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2doX2FkdWx0c19jaGlsZHJlbiwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgICMgbG9hZGluZ3NfZnVuKHFmYV9naF9hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2dob3N0cywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfZ2hfYWR1bHRzX2dvZCwgbG9uZ193aWRlID0gIndpZGUiKSkgJT4lCiAgcmVuYW1lKHN1YmpfaWQgPSBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKHN1YmpfaWQsIHRhcmdldCkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGFyZ2V0LCB5ID0gbG9hZGluZywgY29sb3IgPSBmYWN0b3IsIGZpbGwgPSBmYWN0b3IpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkodGFyZ2V0LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh0aXRsZSA9ICJHaGFuYSBhZHVsdHMgKHNlcGFyYXRlIENDQXMgYnkgdGFyZ2V0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKIyBDQ0E6IFRoYWlsYW5kIGFkdWx0cwoKIyMgU2luZ2xlIGFuYWx5c2lzIHdpdGggYWxsIHRhcmdldHMKCmBgYHtyfQpxX2FkdWx0c190aCA8LSBkX3RoX2FkdWx0c193ICU+JSAKICAjIHJlbW92ZSBwYXJ0aWNpcGFudHMgd2hvIHNraXBwZWQgcXVlc3Rpb25zCiAgZHJvcF9uYSgpICU+JSAKICB0KCkgJT4lIGRhdGEuZnJhbWUoKQpgYGAKCmBgYHtyfQojIGNoZWNrIGZvciBuZWFyLXplcm8gdmFyaWFuY2UgYnkgY29sdW1uCm56X2NvbCA8LSBuZWFyWmVyb1ZhcihxX2FkdWx0c190aCwgc2F2ZU1ldHJpY3MgPSBUKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGZpbHRlcihuenYgPT0gVCkKCnFfYWR1bHRzX3RoIDwtIHFfYWR1bHRzX3RoICU+JQogIHNlbGVjdCgtKG56X2NvbCRjYXBhY2l0eSkpCmBgYAoKYGBge3J9CnFmYV90aF9hZHVsdHMgPC0gZmFfZnVuKHFfYWR1bHRzX3RoLCBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKYGBgCgoiQ29udmVudGlvbmFsbHksIGEgcmF0aW8gb2YgdGhlIGZpcnN0LXRvLXNlY29uZCBlaWdlbnZhbHVlID4gMzoxLi4uIAoKYGBge3J9CnFmYV90aF9hZHVsdHMkVmFjY291bnRlZCAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgbXV0YXRlKHJhdGlvID0gRjEvRjIpICU+JQogIGZpbHRlcihncmVwbCgiU1MiLCBzdGF0KSkKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CnFmYV90aF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudChGMV9uZWcpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogIGZpbHRlcihGMV9uZWcgPT0gVCkKYGBgCgoiLi4uYW5kIGEgbWVhbiBjb21wZXRlbmNlIG9mICh2ZXJ5IHJvdWdobHkpIGFyb3VuZCAuNSAoYW5kIHByZWZlcmFibHkgbXVjaCBoaWdoZXIpIG1lYW5zIHlvdSBoYXZlIGNvbnNlbnN1cywgYW5kIGluY3JlYXNlcyB5b3VyIGNvbmZpZGVuY2UgaW4gdGhlIGluZmVyZW5jZSB0aGF0IGl0IGlzIGEgY3VsdHVyYWwgY29uc2Vuc3VzLiIgCgpgYGB7cn0KcWZhX3RoX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpxZmFfdGhfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihkX3RoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDEsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCBzaXplID0gMC4xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGFlc3RoZXRpY3MgPSBjKCJjb2xvciIsICJmaWxsIikpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHRhcmdldCwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiVGhhaWxhbmQgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgojIyBTZXBhcmF0ZSBhbmFseXNlcyBieSB0YXJnZXQKCmBgYHtyfQpxZmFfdGhfYWR1bHRzX3JvY2tzIDwtIGZhX2Z1bihxX2FkdWx0c190aCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJyb2NrcyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV90aF9hZHVsdHNfZmxvd2VycyA8LSBmYV9mdW4ocV9hZHVsdHNfdGggJT4lIHNlbGVjdChjb250YWlucygiZmxvd2VycyIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV90aF9hZHVsdHNfYmVldGxlcyA8LSBmYV9mdW4ocV9hZHVsdHNfdGggJT4lIHNlbGVjdChjb250YWlucygiYmVldGxlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoImNyaWNrZXRzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3RoX2FkdWx0c19jaGlja2VucyA8LSBmYV9mdW4ocV9hZHVsdHNfdGggJT4lIHNlbGVjdChjb250YWlucygiY2hpY2tlbnMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3RoX2FkdWx0c19taWNlIDwtIGZhX2Z1bihxX2FkdWx0c190aCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJtaWNlIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3RoX2FkdWx0c19kb2dzIDwtIGZhX2Z1bihxX2FkdWx0c190aCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJkb2dzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3RoX2FkdWx0c19jaGlsZHJlbiA8LSBmYV9mdW4ocV9hZHVsdHNfdGggJT4lIHNlbGVjdChjb250YWlucygiY2hpbGRyZW4iKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdGhfYWR1bHRzX2NlbGxwaG9uZXMgPC0gZmFfZnVuKHFfYWR1bHRzX3RoICU+JSBzZWxlY3QoY29udGFpbnMoImNlbGxwaG9uZXMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdGhfYWR1bHRzX2Nob3N0cyA8LSBmYV9mdW4ocV9hZHVsdHNfdGggJT4lIHNlbGVjdChjb250YWlucygiZ2hvc3RzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdGhfYWR1bHRzX2dvZCA8LSBmYV9mdW4ocV9hZHVsdHNfdGggJT4lIHNlbGVjdChjb250YWlucygiZ29kIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpgYGAKCiJDb252ZW50aW9uYWxseSwgYSByYXRpbyBvZiB0aGUgZmlyc3QtdG8tc2Vjb25kIGVpZ2VudmFsdWUgPiAzOjEuLi4KCmBgYHtyfQpkYXRhLmZyYW1lKHJvY2tzID0gcWZhX3RoX2FkdWx0c19yb2NrcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBmbG93ZXJzID0gcWZhX3RoX2FkdWx0c19mbG93ZXJzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGJlZXRsZXMgPSBxZmFfdGhfYWR1bHRzX2JlZXRsZXMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgY2hpY2tlbnMgPSBxZmFfdGhfYWR1bHRzX2NoaWNrZW5zJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIG1pY2UgPSBxZmFfdGhfYWR1bHRzX21pY2UkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZG9ncyA9IHFmYV90aF9hZHVsdHNfZG9ncyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBjaGlsZHJlbiA9IHFmYV90aF9hZHVsdHNfY2hpbGRyZW4kVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgY2VsbHBob25lcyA9IHFmYV90aF9hZHVsdHNfY2VsbHBob25lcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBnaG9zdHMgPSBxZmFfdGhfYWR1bHRzX2Nob3N0cyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBnb2QgPSBxZmFfdGhfYWR1bHRzX2dvZCRWYWNjb3VudGVkWzEsXSkgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInRhcmdldCIpICU+JQogIG11dGF0ZShyYXRpbyA9IEYxL0YyKQpgYGAKCiIuLi5wbHVzIG5vIChvciB2ZXJ5IGZldykgbmVnYXRpdmUgbG9hZGluZ3Mgb24gdGhlIGZpcnN0IGZhY3Rvci4uLiIgCgpgYGB7cn0KYmluZF9yb3dzKGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX3JvY2tzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfZmxvd2VycywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX2JlZXRsZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19jaGlja2VucywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX21pY2UsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19kb2dzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfY2hpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfY2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudCh0YXJnZXQsIEYxX25lZykgJT4lCiAgY29tcGxldGUoRjFfbmVnLCBuZXN0aW5nKHRhcmdldCksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBmaWx0ZXIoRjFfbmVnID09IFQpCmBgYAoKIi4uLmFuZCBhIG1lYW4gY29tcGV0ZW5jZSBvZiAodmVyeSByb3VnaGx5KSBhcm91bmQgLjUgKGFuZCBwcmVmZXJhYmx5IG11Y2ggaGlnaGVyKSBtZWFucyB5b3UgaGF2ZSBjb25zZW5zdXMsIGFuZCBpbmNyZWFzZXMgeW91ciBjb25maWRlbmNlIGluIHRoZSBpbmZlcmVuY2UgdGhhdCBpdCBpcyBhIGN1bHR1cmFsIGNvbnNlbnN1cy4iIAoKYGBge3J9CmJpbmRfcm93cyhsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19yb2NrcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX2Zsb3dlcnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19iZWV0bGVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfY2hpY2tlbnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19taWNlLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfZG9ncywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX2NoaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX2Nob3N0cywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX2dvZCwgbG9uZ193aWRlID0gIndpZGUiKSkgJT4lCiAgcmVuYW1lKHN1YmpfaWQgPSBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdyb3VwX2J5KHRhcmdldCkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKEYxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNX0KYmluZF9yb3dzKGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX3JvY2tzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfZmxvd2VycywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX2JlZXRsZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19jaGlja2VucywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdGhfYWR1bHRzX21pY2UsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19kb2dzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfY2hpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3RoX2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfY2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV90aF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWMoc3Vial9pZCwgdGFyZ2V0KSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0YXJnZXQsIHkgPSBsb2FkaW5nLCBjb2xvciA9IGZhY3RvciwgZmlsbCA9IGZhY3RvcikpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAxLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMCwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiLCAiZmlsbCIpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieSh0YXJnZXQsIGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibG9hZGluZyIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBzaGFwZSA9IDIxLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBsYWJzKHRpdGxlID0gIlRoYWlsYW5kIGFkdWx0cyAoc2VwYXJhdGUgQ0NBcyBieSB0YXJnZXQpIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgoKIyBDQ0E6IENoaW5hIGFkdWx0cwoKIyMgU2luZ2xlIGFuYWx5c2lzIHdpdGggYWxsIHRhcmdldHMKCmBgYHtyfQpxX2FkdWx0c19jaCA8LSBkX2NoX2FkdWx0c193ICU+JSAKICAjIHJlbW92ZSBwYXJ0aWNpcGFudHMgd2hvIHNraXBwZWQgcXVlc3Rpb25zCiAgZHJvcF9uYSgpICU+JSAKICB0KCkgJT4lIGRhdGEuZnJhbWUoKQpgYGAKCmBgYHtyfQojIGNoZWNrIGZvciBuZWFyLXplcm8gdmFyaWFuY2UgYnkgY29sdW1uCm56X2NvbCA8LSBuZWFyWmVyb1ZhcihxX2FkdWx0c19jaCwgc2F2ZU1ldHJpY3MgPSBUKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGZpbHRlcihuenYgPT0gVCkKCnFfYWR1bHRzX2NoIDwtIHFfYWR1bHRzX2NoICU+JQogIHNlbGVjdCgtKG56X2NvbCRjYXBhY2l0eSkpCmBgYAoKYGBge3J9CnFmYV9jaF9hZHVsdHMgPC0gZmFfZnVuKHFfYWR1bHRzX2NoLCBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKYGBgCgoiQ29udmVudGlvbmFsbHksIGEgcmF0aW8gb2YgdGhlIGZpcnN0LXRvLXNlY29uZCBlaWdlbnZhbHVlID4gMzoxLi4uIAoKYGBge3J9CnFmYV9jaF9hZHVsdHMkVmFjY291bnRlZCAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgbXV0YXRlKHJhdGlvID0gRjEvRjIpICU+JQogIGZpbHRlcihncmVwbCgiU1MiLCBzdGF0KSkKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CnFmYV9jaF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudChGMV9uZWcpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogIGZpbHRlcihGMV9uZWcgPT0gVCkKYGBgCgoiLi4uYW5kIGEgbWVhbiBjb21wZXRlbmNlIG9mICh2ZXJ5IHJvdWdobHkpIGFyb3VuZCAuNSAoYW5kIHByZWZlcmFibHkgbXVjaCBoaWdoZXIpIG1lYW5zIHlvdSBoYXZlIGNvbnNlbnN1cywgYW5kIGluY3JlYXNlcyB5b3VyIGNvbmZpZGVuY2UgaW4gdGhlIGluZmVyZW5jZSB0aGF0IGl0IGlzIGEgY3VsdHVyYWwgY29uc2Vuc3VzLiIgCgpgYGB7cn0KcWZhX2NoX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpxZmFfY2hfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihkX2NoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDEsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCBzaXplID0gMC4xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGFlc3RoZXRpY3MgPSBjKCJjb2xvciIsICJmaWxsIikpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHRhcmdldCwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiQ2hpbmEgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgojIyBTZXBhcmF0ZSBhbmFseXNlcyBieSB0YXJnZXQKCmBgYHtyfQpxZmFfY2hfYWR1bHRzX3JvY2tzIDwtIGZhX2Z1bihxX2FkdWx0c19jaCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJyb2NrcyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV9jaF9hZHVsdHNfZmxvd2VycyA8LSBmYV9mdW4ocV9hZHVsdHNfY2ggJT4lIHNlbGVjdChjb250YWlucygiZmxvd2VycyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2NoX2FkdWx0c19iZWV0bGVzIDwtIGZhX2Z1bihxX2FkdWx0c19jaCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJiZWV0bGVzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucygiY3JpY2tldHMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfY2hfYWR1bHRzX2NoaWNrZW5zIDwtIGZhX2Z1bihxX2FkdWx0c19jaCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJjaGlja2VucyIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfY2hfYWR1bHRzX21pY2UgPC0gZmFfZnVuKHFfYWR1bHRzX2NoICU+JSBzZWxlY3QoY29udGFpbnMoIm1pY2UiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQojIHFmYV9jaF9hZHVsdHNfZG9ncyA8LSBmYV9mdW4ocV9hZHVsdHNfY2ggJT4lIHNlbGVjdChjb250YWlucygiZG9ncyIpKSwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2NoX2FkdWx0c19jaGlsZHJlbiA8LSBmYV9mdW4ocV9hZHVsdHNfY2ggJT4lIHNlbGVjdChjb250YWlucygiY2hpbGRyZW4iKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfY2hfYWR1bHRzX2NlbGxwaG9uZXMgPC0gZmFfZnVuKHFfYWR1bHRzX2NoICU+JSBzZWxlY3QoY29udGFpbnMoImNlbGxwaG9uZXMiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV9jaF9hZHVsdHNfZ2hvc3RzIDwtIGZhX2Z1bihxX2FkdWx0c19jaCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJnaG9zdHMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV9jaF9hZHVsdHNfZ29kIDwtIGZhX2Z1bihxX2FkdWx0c19jaCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJnb2QiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCmBgYAoKIkNvbnZlbnRpb25hbGx5LCBhIHJhdGlvIG9mIHRoZSBmaXJzdC10by1zZWNvbmQgZWlnZW52YWx1ZSA+IDM6MS4uLgoKYGBge3J9CmRhdGEuZnJhbWUocm9ja3MgPSBxZmFfY2hfYWR1bHRzX3JvY2tzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGZsb3dlcnMgPSBxZmFfY2hfYWR1bHRzX2Zsb3dlcnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgYmVldGxlcyA9IHFmYV9jaF9hZHVsdHNfYmVldGxlcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBjaGlja2VucyA9IHFmYV9jaF9hZHVsdHNfY2hpY2tlbnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgbWljZSA9IHFmYV9jaF9hZHVsdHNfbWljZSRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICAjIGRvZ3MgPSBxZmFfY2hfYWR1bHRzX2RvZ3MkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgY2hpbGRyZW4gPSBxZmFfY2hfYWR1bHRzX2NoaWxkcmVuJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGNlbGxwaG9uZXMgPSBxZmFfY2hfYWR1bHRzX2NlbGxwaG9uZXMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZ2hvc3RzID0gcWZhX2NoX2FkdWx0c19naG9zdHMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZ29kID0gcWZhX2NoX2FkdWx0c19nb2QkVmFjY291bnRlZFsxLF0pICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ0YXJnZXQiKSAlPiUKICBtdXRhdGUocmF0aW8gPSBGMS9GMikKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CmJpbmRfcm93cyhsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19yb2NrcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfY2hfYWR1bHRzX2Zsb3dlcnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19iZWV0bGVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfY2hpY2tlbnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19taWNlLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgIyBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19kb2dzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfY2hpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfZ2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudCh0YXJnZXQsIEYxX25lZykgJT4lCiAgY29tcGxldGUoRjFfbmVnLCBuZXN0aW5nKHRhcmdldCksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBmaWx0ZXIoRjFfbmVnID09IFQpCmBgYAoKIi4uLmFuZCBhIG1lYW4gY29tcGV0ZW5jZSBvZiAodmVyeSByb3VnaGx5KSBhcm91bmQgLjUgKGFuZCBwcmVmZXJhYmx5IG11Y2ggaGlnaGVyKSBtZWFucyB5b3UgaGF2ZSBjb25zZW5zdXMsIGFuZCBpbmNyZWFzZXMgeW91ciBjb25maWRlbmNlIGluIHRoZSBpbmZlcmVuY2UgdGhhdCBpdCBpcyBhIGN1bHR1cmFsIGNvbnNlbnN1cy4iIAoKYGBge3J9CmJpbmRfcm93cyhsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19yb2NrcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfY2hfYWR1bHRzX2Zsb3dlcnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19iZWV0bGVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfY2hpY2tlbnMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19taWNlLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgIyBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19kb2dzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfY2hpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfZ2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpiaW5kX3Jvd3MobG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2NoX2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfYmVldGxlcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfY2hfYWR1bHRzX2NoaWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfbWljZSwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgICMgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfZG9ncywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfY2hfYWR1bHRzX2NoaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9jaF9hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfY2hfYWR1bHRzX2dob3N0cywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfY2hfYWR1bHRzX2dvZCwgbG9uZ193aWRlID0gIndpZGUiKSkgJT4lCiAgcmVuYW1lKHN1YmpfaWQgPSBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKHN1YmpfaWQsIHRhcmdldCkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGFyZ2V0LCB5ID0gbG9hZGluZywgY29sb3IgPSBmYWN0b3IsIGZpbGwgPSBmYWN0b3IpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkodGFyZ2V0LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh0aXRsZSA9ICJDaGluYSBhZHVsdHMgKHNlcGFyYXRlIENDQXMgYnkgdGFyZ2V0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKCiMgQ0NBOiBWYW51YXR1IGFkdWx0cwoKIyMgU2luZ2xlIGFuYWx5c2lzIHdpdGggYWxsIHRhcmdldHMKCmBgYHtyfQpxX2FkdWx0c192dCA8LSBkX3Z0X2FkdWx0c193ICU+JSAKICAjIHJlbW92ZSBwYXJ0aWNpcGFudHMgd2hvIHNraXBwZWQgcXVlc3Rpb25zCiAgZHJvcF9uYSgpICU+JSAKICB0KCkgJT4lIGRhdGEuZnJhbWUoKQpgYGAKCmBgYHtyfQojIGNoZWNrIGZvciBuZWFyLXplcm8gdmFyaWFuY2UgYnkgY29sdW1uCm56X2NvbCA8LSBuZWFyWmVyb1ZhcihxX2FkdWx0c192dCwgc2F2ZU1ldHJpY3MgPSBUKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGZpbHRlcihuenYgPT0gVCkKCnFfYWR1bHRzX3Z0IDwtIHFfYWR1bHRzX3Z0ICU+JQogIHNlbGVjdCgtKG56X2NvbCRjYXBhY2l0eSkpCmBgYAoKYGBge3J9CnFmYV92dF9hZHVsdHMgPC0gZmFfZnVuKHFfYWR1bHRzX3Z0LCBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKYGBgCgoiQ29udmVudGlvbmFsbHksIGEgcmF0aW8gb2YgdGhlIGZpcnN0LXRvLXNlY29uZCBlaWdlbnZhbHVlID4gMzoxLi4uIAoKYGBge3J9CnFmYV92dF9hZHVsdHMkVmFjY291bnRlZCAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgbXV0YXRlKHJhdGlvID0gRjEvRjIpICU+JQogIGZpbHRlcihncmVwbCgiU1MiLCBzdGF0KSkKYGBgCgoiLi4ucGx1cyBubyAob3IgdmVyeSBmZXcpIG5lZ2F0aXZlIGxvYWRpbmdzIG9uIHRoZSBmaXJzdCBmYWN0b3IuLi4iIAoKYGBge3J9CnFmYV92dF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudChGMV9uZWcpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogIGZpbHRlcihGMV9uZWcgPT0gVCkKYGBgCgoiLi4uYW5kIGEgbWVhbiBjb21wZXRlbmNlIG9mICh2ZXJ5IHJvdWdobHkpIGFyb3VuZCAuNSAoYW5kIHByZWZlcmFibHkgbXVjaCBoaWdoZXIpIG1lYW5zIHlvdSBoYXZlIGNvbnNlbnN1cywgYW5kIGluY3JlYXNlcyB5b3VyIGNvbmZpZGVuY2UgaW4gdGhlIGluZmVyZW5jZSB0aGF0IGl0IGlzIGEgY3VsdHVyYWwgY29uc2Vuc3VzLiIgCgpgYGB7cn0KcWZhX3Z0X2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpxZmFfdnRfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihkX3Z0X2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDEsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCBzaXplID0gMC4xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGFlc3RoZXRpY3MgPSBjKCJjb2xvciIsICJmaWxsIikpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHRhcmdldCwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiVmFudWF0dSBhZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRjE6IGN1bHR1cmFsIGNvbXBldGVuY2UsIEYyOiByZXNpZHVhbCBhZ3JlZW1lbnQiKQpgYGAKCiMjIFNlcGFyYXRlIGFuYWx5c2VzIGJ5IHRhcmdldAoKYGBge3J9CnFmYV92dF9hZHVsdHNfcm9ja3MgPC0gZmFfZnVuKHFfYWR1bHRzX3Z0ICU+JSBzZWxlY3QoY29udGFpbnMoInJvY2tzIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3Z0X2FkdWx0c19mbG93ZXJzIDwtIGZhX2Z1bihxX2FkdWx0c192dCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJmbG93ZXJzIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdnRfYWR1bHRzX2JlZXRsZXMgPC0gZmFfZnVuKHFfYWR1bHRzX3Z0ICU+JSBzZWxlY3QoY29udGFpbnMoImJlZXRsZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJjcmlja2V0cyIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV92dF9hZHVsdHNfdnRpY2tlbnMgPC0gZmFfZnVuKHFfYWR1bHRzX3Z0ICU+JSBzZWxlY3QoY29udGFpbnMoImNoaWNrZW5zIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV92dF9hZHVsdHNfbWljZSA8LSBmYV9mdW4ocV9hZHVsdHNfdnQgJT4lIHNlbGVjdChjb250YWlucygibWljZSIpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV92dF9hZHVsdHNfZG9ncyA8LSBmYV9mdW4ocV9hZHVsdHNfdnQgJT4lIHNlbGVjdChjb250YWlucygiZG9ncyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX3Z0X2FkdWx0c192dGlsZHJlbiA8LSBmYV9mdW4ocV9hZHVsdHNfdnQgJT4lIHNlbGVjdChjb250YWlucygiY2hpbGRyZW4iKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfdnRfYWR1bHRzX2NlbGxwaG9uZXMgPC0gZmFfZnVuKHFfYWR1bHRzX3Z0ICU+JSBzZWxlY3QoY29udGFpbnMoImNlbGxwaG9uZXMiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV92dF9hZHVsdHNfZ2hvc3RzIDwtIGZhX2Z1bihxX2FkdWx0c192dCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJnaG9zdHMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV92dF9hZHVsdHNfZ29kIDwtIGZhX2Z1bihxX2FkdWx0c192dCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJnb2QiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCmBgYAoKIkNvbnZlbnRpb25hbGx5LCBhIHJhdGlvIG9mIHRoZSBmaXJzdC10by1zZWNvbmQgZWlnZW52YWx1ZSA+IDM6MS4uLgoKYGBge3J9CmRhdGEuZnJhbWUocm9ja3MgPSBxZmFfdnRfYWR1bHRzX3JvY2tzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGZsb3dlcnMgPSBxZmFfdnRfYWR1bHRzX2Zsb3dlcnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgYmVldGxlcyA9IHFmYV92dF9hZHVsdHNfYmVldGxlcyRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBjaGlja2VucyA9IHFmYV92dF9hZHVsdHNfdnRpY2tlbnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgbWljZSA9IHFmYV92dF9hZHVsdHNfbWljZSRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBkb2dzID0gcWZhX3Z0X2FkdWx0c19kb2dzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGNoaWxkcmVuID0gcWZhX3Z0X2FkdWx0c192dGlsZHJlbiRWYWNjb3VudGVkWzEsXSwKICAgICAgICAgICBjZWxscGhvbmVzID0gcWZhX3Z0X2FkdWx0c19jZWxscGhvbmVzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGdob3N0cyA9IHFmYV92dF9hZHVsdHNfZ2hvc3RzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGdvZCA9IHFmYV92dF9hZHVsdHNfZ29kJFZhY2NvdW50ZWRbMSxdKSAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigidGFyZ2V0IikgJT4lCiAgbXV0YXRlKHJhdGlvID0gRjEvRjIpCmBgYAoKIi4uLnBsdXMgbm8gKG9yIHZlcnkgZmV3KSBuZWdhdGl2ZSBsb2FkaW5ncyBvbiB0aGUgZmlyc3QgZmFjdG9yLi4uIiAKCmBgYHtyfQpiaW5kX3Jvd3MobG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfYmVldGxlcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX3Z0aWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfbWljZSwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX2RvZ3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c192dGlsZHJlbiwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX2NlbGxwaG9uZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19naG9zdHMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19nb2QsIGxvbmdfd2lkZSA9ICJ3aWRlIikpICU+JQogIHJlbmFtZShzdWJqX2lkID0gY2FwYWNpdHkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICB0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBtdXRhdGUoRjFfbmVnID0gaWZlbHNlKEYxIDwgMCwgVCwgRikpICU+JQogIGNvdW50KHRhcmdldCwgRjFfbmVnKSAlPiUKICBjb21wbGV0ZShGMV9uZWcsIG5lc3RpbmcodGFyZ2V0KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieSh0YXJnZXQpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogIGZpbHRlcihGMV9uZWcgPT0gVCkKYGBgCgoiLi4uYW5kIGEgbWVhbiBjb21wZXRlbmNlIG9mICh2ZXJ5IHJvdWdobHkpIGFyb3VuZCAuNSAoYW5kIHByZWZlcmFibHkgbXVjaCBoaWdoZXIpIG1lYW5zIHlvdSBoYXZlIGNvbnNlbnN1cywgYW5kIGluY3JlYXNlcyB5b3VyIGNvbmZpZGVuY2UgaW4gdGhlIGluZmVyZW5jZSB0aGF0IGl0IGlzIGEgY3VsdHVyYWwgY29uc2Vuc3VzLiIgCgpgYGB7cn0KYmluZF9yb3dzKGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX3JvY2tzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfZmxvd2VycywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX2JlZXRsZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c192dGlja2VucywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX21pY2UsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19kb2dzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfdnRpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19jZWxscGhvbmVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfZ2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oRjEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQpiaW5kX3Jvd3MobG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfYmVldGxlcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX3Z0aWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV92dF9hZHVsdHNfbWljZSwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX2RvZ3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c192dGlsZHJlbiwgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfdnRfYWR1bHRzX2NlbGxwaG9uZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19naG9zdHMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX3Z0X2FkdWx0c19nb2QsIGxvbmdfd2lkZSA9ICJ3aWRlIikpICU+JQogIHJlbmFtZShzdWJqX2lkID0gY2FwYWNpdHkpICU+JQogIG11dGF0ZSh0YXJnZXQgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICB0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDEsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCBzaXplID0gMC4xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGFlc3RoZXRpY3MgPSBjKCJjb2xvciIsICJmaWxsIikpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHRhcmdldCwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiVmFudWF0dSBhZHVsdHMgKHNlcGFyYXRlIENDQXMgYnkgdGFyZ2V0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKCiMgQ0NBOiBBbGwgYWR1bHRzCgojIyBTaW5nbGUgYW5hbHlzaXMgd2l0aCBhbGwgdGFyZ2V0cwoKYGBge3J9CnFfYWR1bHRzX2FsbCA8LSBiaW5kX3Jvd3MoZF91c19hZHVsdHNfdyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfZ2hfYWR1bHRzX3cgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3RoX2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NoX2FkdWx0c193ICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF92dF9hZHVsdHNfdyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIikpICU+JSAKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmpfaWQiKSAlPiUKICAjIHJlbW92ZSBwYXJ0aWNpcGFudHMgd2hvIHNraXBwZWQgcXVlc3Rpb25zCiAgZHJvcF9uYSgpICU+JSAKICB0KCkgJT4lIAogIGRhdGEuZnJhbWUoKQpgYGAKCmBgYHtyfQojIGNoZWNrIGZvciBuZWFyLXplcm8gdmFyaWFuY2UgYnkgY29sdW1uCm56X2NvbCA8LSBuZWFyWmVyb1ZhcihxX2FkdWx0c19hbGwsIHNhdmVNZXRyaWNzID0gVCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBmaWx0ZXIobnp2ID09IFQpCgpxX2FkdWx0c19hbGwgPC0gcV9hZHVsdHNfYWxsICU+JQogIHNlbGVjdCgtKG56X2NvbCRjYXBhY2l0eSkpCmBgYAoKYGBge3J9CnFmYV9hbGxfYWR1bHRzIDwtIGZhX2Z1bihxX2FkdWx0c19hbGwsIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpgYGAKCiJDb252ZW50aW9uYWxseSwgYSByYXRpbyBvZiB0aGUgZmlyc3QtdG8tc2Vjb25kIGVpZ2VudmFsdWUgPiAzOjEuLi4gCgpgYGB7cn0KcWZhX2FsbF9hZHVsdHMkVmFjY291bnRlZCAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgbXV0YXRlKHJhdGlvID0gRjEvRjIpCmBgYAoKIi4uLnBsdXMgbm8gKG9yIHZlcnkgZmV3KSBuZWdhdGl2ZSBsb2FkaW5ncyBvbiB0aGUgZmlyc3QgZmFjdG9yLi4uIiAKCmBgYHtyfQpxZmFfYWxsX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBtdXRhdGUoRjFfbmVnID0gaWZlbHNlKEYxIDwgMCwgVCwgRikpICU+JQogIGNvdW50KEYxX25lZykgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkKYGBgCiIuLi5hbmQgYSBtZWFuIGNvbXBldGVuY2Ugb2YgKHZlcnkgcm91Z2hseSkgYXJvdW5kIC41IChhbmQgcHJlZmVyYWJseSBtdWNoIGhpZ2hlcikgbWVhbnMgeW91IGhhdmUgY29uc2Vuc3VzLCBhbmQgaW5jcmVhc2VzIHlvdXIgY29uZmlkZW5jZSBpbiB0aGUgaW5mZXJlbmNlIHRoYXQgaXQgaXMgYSBjdWx0dXJhbCBjb25zZW5zdXMuIgoKYGBge3J9CnFmYV9hbGxfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihGMSkpCmBgYAoKYGBge3J9CnFmYV9hbGxfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZF91c19hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9naF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF90aF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9jaF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF92dF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpKSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBzdW1tYXJpc2UobWVhbl9GMSA9IG1lYW4oRjEpLAogICAgICAgICAgICBtZWFuX0YyID0gbWVhbihGMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBhcnJhbmdlKG1lYW5fRjEpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjN9CnFmYV9hbGxfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZF91c19hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9naF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF90aF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9jaF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF92dF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpKSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdiksCiAgICAgICAgIGNvdW50cnkgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCBjb3VudHJ5LCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkoY291bnRyeSwgdGFyZ2V0LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJBbGwgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuM30KcWZhX2FsbF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIikgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhkX3VzX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX2doX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX3RoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX2NoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX3Z0X2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpKSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSwKICAgICAgICAgY291bnRyeSA9IGdzdWIoIl8uKiQiLCAiIiwgc3Vial9pZCksCiAgICAgICAgIGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKHN1YmpfaWQsIGNvdW50cnksIHRhcmdldCkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY291bnRyeSwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGZhY2V0X2dyaWQofiB0YXJnZXQpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAxLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMCwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiLCAiZmlsbCIpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShjb3VudHJ5LCB0YXJnZXQsIGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibG9hZGluZyIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBzaGFwZSA9IDIxLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkFsbCBhZHVsdHMgKHNlcGFyYXRlIENDQXMgYnkgdGFyZ2V0LCBwb29sZWQgYWNyb3NzIHNhbXBsZXMpIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IiwKICAgICAgIGNhcHRpb24gPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KcWZhX2FsbF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIikgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhkX3VzX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX2doX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX3RoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX2NoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX3Z0X2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpKSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSwKICAgICAgICAgY291bnRyeSA9IGdzdWIoIl8uKiQiLCAiIiwgc3Vial9pZCksCiAgICAgICAgIGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKHN1YmpfaWQsIGNvdW50cnksIHRhcmdldCkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY291bnRyeSwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGZhY2V0X3dyYXAofiB0YXJnZXQsIG5jb2wgPSAzKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkoY291bnRyeSwgdGFyZ2V0LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJBbGwgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNX0KcWZhX2FsbF9hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIikgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhkX3VzX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX2doX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX3RoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX2NoX2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICBkX3Z0X2FkdWx0cyAlPiUgc2VsZWN0KHN1YmpfaWQsIHRhcmdldCkpKSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSwKICAgICAgICAgY291bnRyeSA9IGdzdWIoIl8uKiQiLCAiIiwgc3Vial9pZCksCiAgICAgICAgIGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKHN1YmpfaWQsIGNvdW50cnksIHRhcmdldCkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY291bnRyeSwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogICMgZmFjZXRfd3JhcCh+IHRhcmdldCwgbmNvbCA9IDMpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAxLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMCwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiLCAiZmlsbCIpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShjb3VudHJ5LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJBbGwgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgojIyBTZXBhcmF0ZSBhbmFseXNlcyBieSB0YXJnZXQKCmBgYHtyfQpxZmFfYWxsX2FkdWx0c19yb2NrcyA8LSBmYV9mdW4ocV9hZHVsdHNfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoInJvY2tzIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV9hbGxfYWR1bHRzX2Zsb3dlcnMgPC0gZmFfZnVuKHFfYWR1bHRzX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJmbG93ZXJzIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2FsbF9hZHVsdHNfYmVldGxlcyA8LSBmYV9mdW4ocV9hZHVsdHNfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoImJlZXRsZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoImNyaWNrZXRzIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDIsIGNob3Nlbl9yb3QgPSAibm9uZSIpCnFmYV9hbGxfYWR1bHRzX2FsbGlja2VucyA8LSBmYV9mdW4ocV9hZHVsdHNfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoImNoaWNrZW5zIikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2FsbF9hZHVsdHNfbWljZSA8LSBmYV9mdW4ocV9hZHVsdHNfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoIm1pY2UiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2FsbF9hZHVsdHNfZG9ncyA8LSBmYV9mdW4ocV9hZHVsdHNfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoImRvZ3MiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfYWxsX2FkdWx0c19hbGxpbGRyZW4gPC0gZmFfZnVuKHFfYWR1bHRzX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJjaGlsZHJlbiIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMiwgY2hvc2VuX3JvdCA9ICJub25lIikKcWZhX2FsbF9hZHVsdHNfY2VsbHBob25lcyA8LSBmYV9mdW4ocV9hZHVsdHNfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoImNlbGxwaG9uZXMiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfYWxsX2FkdWx0c19naG9zdHMgPC0gZmFfZnVuKHFfYWR1bHRzX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJnaG9zdHMiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpxZmFfYWxsX2FkdWx0c19nb2QgPC0gZmFfZnVuKHFfYWR1bHRzX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJnb2QiKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAyLCBjaG9zZW5fcm90ID0gIm5vbmUiKQpgYGAKCiJDb252ZW50aW9uYWxseSwgYSByYXRpbyBvZiB0aGUgZmlyc3QtdG8tc2Vjb25kIGVpZ2VudmFsdWUgPiAzOjEuLi4KCmBgYHtyfQpkYXRhLmZyYW1lKHJvY2tzID0gcWZhX2FsbF9hZHVsdHNfcm9ja3MkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZmxvd2VycyA9IHFmYV9hbGxfYWR1bHRzX2Zsb3dlcnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgYmVldGxlcyA9IHFmYV9hbGxfYWR1bHRzX2JlZXRsZXMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgY2hpY2tlbnMgPSBxZmFfYWxsX2FkdWx0c19hbGxpY2tlbnMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgbWljZSA9IHFmYV9hbGxfYWR1bHRzX21pY2UkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZG9ncyA9IHFmYV9hbGxfYWR1bHRzX2RvZ3MkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgY2hpbGRyZW4gPSBxZmFfYWxsX2FkdWx0c19hbGxpbGRyZW4kVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgY2VsbHBob25lcyA9IHFmYV9hbGxfYWR1bHRzX2NlbGxwaG9uZXMkVmFjY291bnRlZFsxLF0sCiAgICAgICAgICAgZ2hvc3RzID0gcWZhX2FsbF9hZHVsdHNfZ2hvc3RzJFZhY2NvdW50ZWRbMSxdLAogICAgICAgICAgIGdvZCA9IHFmYV9hbGxfYWR1bHRzX2dvZCRWYWNjb3VudGVkWzEsXSkgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInRhcmdldCIpICU+JQogIG11dGF0ZShyYXRpbyA9IEYxL0YyKQpgYGAKCiIuLi5wbHVzIG5vIChvciB2ZXJ5IGZldykgbmVnYXRpdmUgbG9hZGluZ3Mgb24gdGhlIGZpcnN0IGZhY3Rvci4uLiIgCgpgYGB7cn0KYmluZF9yb3dzKGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19yb2NrcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX2JlZXRsZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfYWxsaWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX21pY2UsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfZG9ncywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19hbGxpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19naG9zdHMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUodGFyZ2V0ID0gZ3N1YigiXi4qXyIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgdGFyZ2V0ID0gZmFjdG9yKHRhcmdldCwgbGV2ZWxzID0gbGV2ZWxzX3RhcmdldF91bml2KSkgJT4lCiAgbXV0YXRlKEYxX25lZyA9IGlmZWxzZShGMSA8IDAsIFQsIEYpKSAlPiUKICBjb3VudCh0YXJnZXQsIEYxX25lZykgJT4lCiAgY29tcGxldGUoRjFfbmVnLCBuZXN0aW5nKHRhcmdldCksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBmaWx0ZXIoRjFfbmVnID09IFQpCmBgYAoKIi4uLmFuZCBhIG1lYW4gY29tcGV0ZW5jZSBvZiAodmVyeSByb3VnaGx5KSBhcm91bmQgLjUgKGFuZCBwcmVmZXJhYmx5IG11Y2ggaGlnaGVyKSBtZWFucyB5b3UgaGF2ZSBjb25zZW5zdXMsIGFuZCBpbmNyZWFzZXMgeW91ciBjb25maWRlbmNlIGluIHRoZSBpbmZlcmVuY2UgdGhhdCBpdCBpcyBhIGN1bHR1cmFsIGNvbnNlbnN1cy4iIAoKYGBge3J9CmJpbmRfcm93cyhsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfcm9ja3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfZmxvd2VycywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19iZWV0bGVzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX2FsbGlja2VucywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19taWNlLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX2RvZ3MsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfYWxsaWxkcmVuLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX2NlbGxwaG9uZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfZ2hvc3RzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX2dvZCwgbG9uZ193aWRlID0gIndpZGUiKSkgJT4lCiAgcmVuYW1lKHN1YmpfaWQgPSBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdyb3VwX2J5KHRhcmdldCkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKEYxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNX0KYmluZF9yb3dzKGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19yb2NrcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19mbG93ZXJzLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX2JlZXRsZXMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfYWxsaWNrZW5zLCBsb25nX3dpZGUgPSAid2lkZSIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKHFmYV9hbGxfYWR1bHRzX21pY2UsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfZG9ncywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19hbGxpbGRyZW4sIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfY2VsbHBob25lcywgbG9uZ193aWRlID0gIndpZGUiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihxZmFfYWxsX2FkdWx0c19naG9zdHMsIGxvbmdfd2lkZSA9ICJ3aWRlIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4ocWZhX2FsbF9hZHVsdHNfZ29kLCBsb25nX3dpZGUgPSAid2lkZSIpKSAlPiUKICByZW5hbWUoc3Vial9pZCA9IGNhcGFjaXR5KSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGdzdWIoIl8uKiQiLCAiIiwgc3Vial9pZCksCiAgICAgICAgIGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCBjb3VudHJ5LCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoY291bnRyeSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAxLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMCwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiLCAiZmlsbCIpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieSh0YXJnZXQsIGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibG9hZGluZyIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBzaGFwZSA9IDIxLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBsYWJzKHRpdGxlID0gIkFsbCBhZHVsdHMgKHNlcGFyYXRlIENDQXMgYnkgdGFyZ2V0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjN9CnFmYV9hbGxfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZF91c19hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9naF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF90aF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9jaF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF92dF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpKSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdiksCiAgICAgICAgIGNvdW50cnkgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCBjb3VudHJ5LCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRhcmdldCwgeSA9IGxvYWRpbmcsIGNvbG9yID0gZmFjdG9yLCBmaWxsID0gZmFjdG9yKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkoY291bnRyeSwgdGFyZ2V0LCBmYWN0b3IpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImxvYWRpbmciKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJBbGwgYWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkYxOiBjdWx0dXJhbCBjb21wZXRlbmNlLCBGMjogcmVzaWR1YWwgYWdyZWVtZW50IikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CnFmYV9hbGxfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZF91c19hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9naF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF90aF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9jaF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF92dF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpKSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdiksCiAgICAgICAgIGNvdW50cnkgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCBjb3VudHJ5LCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIHkgPSBsb2FkaW5nLCBjb2xvciA9IGZhY3RvciwgZmlsbCA9IGZhY3RvcikpICsKICBmYWNldF93cmFwKH4gdGFyZ2V0LCBuY29sID0gMykgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDEsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCBzaXplID0gMC4xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGFlc3RoZXRpY3MgPSBjKCJjb2xvciIsICJmaWxsIikpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KGNvdW50cnksIHRhcmdldCwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiQWxsIGFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjV9CnFmYV9hbGxfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZF91c19hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9naF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF90aF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF9jaF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpLAogICAgICAgICAgICAgICAgICAgICAgZF92dF9hZHVsdHMgJT4lIHNlbGVjdChzdWJqX2lkLCB0YXJnZXQpKSkgJT4lCiAgbXV0YXRlKHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdiksCiAgICAgICAgIGNvdW50cnkgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhzdWJqX2lkLCBjb3VudHJ5LCB0YXJnZXQpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIHkgPSBsb2FkaW5nLCBjb2xvciA9IGZhY3RvciwgZmlsbCA9IGZhY3RvcikpICsKICAjIGZhY2V0X3dyYXAofiB0YXJnZXQsIG5jb2wgPSAzKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAsIHNpemUgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkoY291bnRyeSwgZmFjdG9yKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJsb2FkaW5nIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiQWxsIGFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJGMTogY3VsdHVyYWwgY29tcGV0ZW5jZSwgRjI6IHJlc2lkdWFsIGFncmVlbWVudCIpCmBgYAoKCgoKCiMgQWxwaGEKCmBgYHtyLCByZXN1bHRzID0gImhpZGUifQpxX2FscGhhX2FkdWx0cyA8LSBkYXRhLmZyYW1lKAogIFVTID0gYWxwaGFfZnVuKHFfYWR1bHRzX3VzLCAKICAgICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkFMTCIsIAogICAgICAgICAgICAgICAgIHdoaWNoX3ZhcnMgPSBjb2xuYW1lcyhxX2FkdWx0c191cykpLAogIEdoYW5hID0gYWxwaGFfZnVuKHFfYWR1bHRzX2doLCAKICAgICAgICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkFMTCIsIAogICAgICAgICAgICAgICAgICAgIHdoaWNoX3ZhcnMgPSBjb2xuYW1lcyhxX2FkdWx0c19naCkpLAogIFRoYWlsYW5kID0gYWxwaGFfZnVuKHFfYWR1bHRzX3RoLCAKICAgICAgICAgICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkFMTCIsIAogICAgICAgICAgICAgICAgICAgICAgIHdoaWNoX3ZhcnMgPSBjb2xuYW1lcyhxX2FkdWx0c190aCkpLAogIENoaW5hID0gYWxwaGFfZnVuKHFfYWR1bHRzX2NoLCAKICAgICAgICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkFMTCIsIAogICAgICAgICAgICAgICAgICAgIHdoaWNoX3ZhcnMgPSBjb2xuYW1lcyhxX2FkdWx0c19jaCkpLAogIFZhbnVhdHUgPSBhbHBoYV9mdW4ocV9hZHVsdHNfdnQsIAogICAgICAgICAgICAgICAgICAgICAgd2hpY2hfY291bnRyeSA9ICJBTEwiLCAKICAgICAgICAgICAgICAgICAgICAgIHdoaWNoX3ZhcnMgPSBjb2xuYW1lcyhxX2FkdWx0c192dCkpLAogIEFMTCA9IGFscGhhX2Z1bihxX2FkdWx0c19hbGwsIAogICAgICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkFMTCIsIAogICAgICAgICAgICAgICAgICB3aGljaF92YXJzID0gY29sbmFtZXMocV9hZHVsdHNfdnQpKSkKYGBgCgpgYGB7cn0KcV9hbHBoYV9hZHVsdHMKYGBgCgo=